package com.yhsoft.mall.controller;

import com.yhsoft.common.service.TokenService;
import com.yhsoft.common.vo.Result;
import com.yhsoft.mall.controller.request.*;
import com.yhsoft.mall.controller.response.ModuleInfoOutVo;
import com.yhsoft.mall.service.IModuleInfoService;
import com.yhsoft.sys.service.IBaicInterfaceConfigService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.validation.Valid;

/**
 * <p>
 * 模块信息表 前端控制器
 * </p>
 *
 * @author yyyyyyyh
 * @since 2023-10-08
 */
@Api(tags = {"E-小程序内容配置-首页模块内容"})
@RestController
@RequestMapping("/mall/moduleInfo")
public class ModuleInfoController {
    @Resource
    private IModuleInfoService iModuleInfoService;

    @Resource
    private IBaicInterfaceConfigService iBaicInterfaceConfigService;

    @ApiOperation("设置搜索模块内容")
    @PostMapping("/setSearchBar")
    public Result<?> setSearchBar(@RequestBody SearchBarInVo inVo){
        // 先录入appid才能操作
        if(!iBaicInterfaceConfigService.exists(TokenService.getUserBytoken().getCompanyId())){
            return Result.fail("设置失败，需要先录入小程序信息！");
        }

        if(inVo.getId() == null){
            // 检查是否存在
            if(iModuleInfoService.exists("searchBar")){
                return Result.fail("不能重复新增！");
            }

            iModuleInfoService.addSearchBar(inVo);
            return Result.success("新增搜索模块成功");
        }else{
            iModuleInfoService.updateSearchBar(inVo);
            return Result.success("修改搜索模块成功");
        }
    }

    @ApiOperation("设置轮播图模块内容")
    @PostMapping("/setSlideBar")
    public Result<?> setSlideBar(@RequestBody SlideBarInVo inVo){
        // 先录入appid才能操作
        if(!iBaicInterfaceConfigService.exists(TokenService.getUserBytoken().getCompanyId())){
            return Result.fail("设置失败，需要先录入小程序信息！");
        }

        if(inVo.getId() == null){
            // 检查是否存在
            if(iModuleInfoService.exists("slideBar")){
                return Result.fail("不能重复新增！");
            }

            iModuleInfoService.addSlideBar(inVo);
            return Result.success("新增轮播图模块成功");
        }else{
            iModuleInfoService.updateSlideBar(inVo);
            return Result.success("修改轮播图模块成功");
        }
    }

    @ApiOperation("设置公告模块内容")
    @PostMapping("/setNoticeBar")
    public Result<?> setNoticeBar(@RequestBody NoticeBarInVo inVo){
        // 先录入appid才能操作
        if(!iBaicInterfaceConfigService.exists(TokenService.getUserBytoken().getCompanyId())){
            return Result.fail("设置失败，需要先录入小程序信息！");
        }

        if(inVo.getId() == null){
            // 检查是否存在
            if(iModuleInfoService.exists("noticeBar")){
                return Result.fail("不能重复新增！");
            }

            iModuleInfoService.addNoticeBar(inVo);
            return Result.success("新增公告模块成功");
        }else{
            iModuleInfoService.updateNoticeBar(inVo);
            return Result.success("修改公告模块成功");
        }
    }

    @ApiOperation("设置菜单模块内容")
    @PostMapping("/setMenuBar")
    public Result<?> setMenuBar(@RequestBody MenuBarInVo inVo){
        // 先录入appid才能操作
        if(!iBaicInterfaceConfigService.exists(TokenService.getUserBytoken().getCompanyId())){
            return Result.fail("设置失败，需要先录入小程序信息！");
        }

        if(inVo.getId() == null){
            // 检查是否存在
            if(iModuleInfoService.exists("menuBar")){
                return Result.fail("不能重复新增！");
            }

            iModuleInfoService.addMenuBar(inVo);
            return Result.success("新增菜单模块成功");
        }else{
            iModuleInfoService.updateMenuBar(inVo);
            return Result.success("修改菜单模块成功");
        }
    }

    @ApiOperation("设置热销商品模块内容")
    @PostMapping("/setHotBar")
    public Result<?> setHotBar(@RequestBody HotBarInVo inVo){
        // 先录入appid才能操作
        if(!iBaicInterfaceConfigService.exists(TokenService.getUserBytoken().getCompanyId())){
            return Result.fail("设置失败，需要先录入小程序信息！");
        }

        if(inVo.getId() == null){
            // 检查是否存在
            if(iModuleInfoService.exists("hotBar")){
                return Result.fail("不能重复新增！");
            }

            iModuleInfoService.addHotBar(inVo);
            return Result.success("新增热销商品模块成功");
        }else{
            iModuleInfoService.updateHotBar(inVo);
            return Result.success("修改热销商品模块成功");
        }
    }

    @ApiOperation("设置商品模块内容")
    @PostMapping("/setGoodsBar")
    public Result<?> setGoodsBar(@Valid @RequestBody GoodsBarInVo inVo){
        // 先录入appid才能操作
        if(!iBaicInterfaceConfigService.exists(TokenService.getUserBytoken().getCompanyId())){
            return Result.fail("设置失败，需要先录入小程序信息！");
        }

        if(inVo.getId() == null){
            // 检查是否存在
            if(iModuleInfoService.exists("goodsBar")){
                return Result.fail("不能重复新增！");
            }

            iModuleInfoService.addGoodsBar(inVo);
            return Result.success("新增商品模块成功");
        }else{
            iModuleInfoService.updateGoodsBar(inVo);
            return Result.success("修改商品模块成功");
        }
    }


    @ApiOperation("pc获得模块内容")
    @GetMapping("/getModuleInfo")
    public Result<ModuleInfoOutVo> getModuleInfo(){
        ModuleInfoOutVo outVo =  iModuleInfoService.getModuleInfo("");
        return Result.success(outVo);
    }

    @ApiOperation("小程序获得模块内容")
    @GetMapping("/getModuleInfoByWX")
    public Result<ModuleInfoOutVo> getModuleInfoByWX(@RequestParam(value = "appId", required = true) String appId){
        ModuleInfoOutVo outVo =  iModuleInfoService.getModuleInfo(appId);
        return Result.success(outVo);
    }


}
